using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._CartographyTools._MapSeries
{
    /// <summary>
    /// <para>Strip Map Index Features</para>
    /// <para>Creates a series of rectangular polygons, or index features, that follow a single linear feature or a group of linear features. These index features can be used with spatial map series to define pages in a strip map or a set of maps that follow a linear feature. The resulting index features contain attributes that can be used to rotate and orient the map on the page and determine which index features, or pages, are next to the current page (to the left and right or to the top and bottom).</para>
    /// <para>创建一系列矩形面或索引要素，这些面遵循单个线性要素或一组线性要素。这些索引要素可用于空间地图系列，以定义带状地图或遵循线性要素的一组地图中的页面。生成的索引要素包含的属性可用于在页面上旋转和定向地图，并确定当前页面旁边（左侧和右侧或顶部和底部）的索引要素或页面。</para>
    /// </summary>    
    [DisplayName("Strip Map Index Features")]
    public class StripMapIndexFeatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public StripMapIndexFeatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Line Features</para>
        /// <para>The input polyline features defining the path of the strip map index features.</para>
        /// <para>用于定义带状地图索引要素路径的输入折线要素。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>The output feature class of polygon index features.</para>
        /// <para>面索引要素的输出要素类。</para>
        /// </param>
        public StripMapIndexFeatures(object _in_features, object _out_feature_class)
        {
            this._in_features = _in_features;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "Cartography Tools";

        public override string ToolName => "Strip Map Index Features";

        public override string CallName => "cartography.StripMapIndexFeatures";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_features, _out_feature_class, _use_page_unit.GetGPValue(), _scale, _length_along_line, _length_perpendicular_to_line, _page_orientation.GetGPValue(), _overlap_percentage, _starting_page_number, _direction_type.GetGPValue()];

        /// <summary>
        /// <para>Input Line Features</para>
        /// <para>The input polyline features defining the path of the strip map index features.</para>
        /// <para>用于定义带状地图索引要素路径的输入折线要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Line Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The output feature class of polygon index features.</para>
        /// <para>面索引要素的输出要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Use Page Unit and Scale</para>
        /// <para><xdoc>
        ///   <para>Specifies whether index feature size input is in page units.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Index polygon height and width are calculated in page units.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Index polygon height and width are calculated in map units. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定索引要素大小输入是否以页为单位。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 索引面的高度和宽度以页面单位计算。</bullet_item><para/>
        ///     <bullet_item>未选中 - 索引面的高度和宽度以地图单位计算。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Use Page Unit and Scale")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _use_page_unit_value _use_page_unit { get; set; } = _use_page_unit_value._false;

        public enum _use_page_unit_value
        {
            /// <summary>
            /// <para>USEPAGEUNIT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("USEPAGEUNIT")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_USEPAGEUNIT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_USEPAGEUNIT")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Map Scale</para>
        /// <para>Map scale must be specified if index feature lengths (along the line and perpendicular to the line) are to be calculated in page units. If you're using ArcGIS Pro, the default value will be the scale of the active data frame; otherwise, the default will be 1.</para>
        /// <para>如果要以页面单位计算索引要素长度（沿线和垂直于线），则必须指定地图比例。如果您使用的是 ArcGIS Pro，则默认值将为活动数据框的比例;否则，默认值将为 1。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Map Scale")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _scale { get; set; } = null;


        /// <summary>
        /// <para>Length Along the Line</para>
        /// <para>The length of the polygon index feature along the input line feature specified in either map or page units. The default value is determined by the spatial reference of the input line feature or features. This value will be 1/100 of the input feature class extent along the x axis.</para>
        /// <para>沿输入线要素的面索引要素的长度，以地图或页面单位指定。默认值由输入线要素的空间参考确定。此值将是沿 x 轴的输入要素类范围的 1/100。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Length Along the Line")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _length_along_line { get; set; } = "2 DecimalDegrees";


        /// <summary>
        /// <para>Length Perpendicular to the Line</para>
        /// <para>The length of the polygon index feature perpendicular to the input line feature specified in either map or page units. The default value is determined by the spatial reference of the input line feature or features. This value will be one-half the number used for the length along the line.</para>
        /// <para>垂直于以地图或页面单位指定的输入线要素的面索引要素的长度。默认值由输入线要素的空间参考确定。此值将是用于沿线长度的数字的一半。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Length Perpendicular to the Line")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _length_perpendicular_to_line { get; set; } = "1 DecimalDegrees";


        /// <summary>
        /// <para>Page Orientation</para>
        /// <para><xdoc>
        ///   <para>Specifies the orientation of the input line features on the layout page.</para>
        ///   <bulletList>
        ///     <bullet_item>Vertical—The direction of the strip map series on the page is top to bottom.</bullet_item><para/>
        ///     <bullet_item>Horizontal—The direction of the strip map series on the page is left to right. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定布局页面上输入线要素的方向。</para>
        ///   <bulletList>
        ///     <bullet_item>垂直 - 页面上带状地图系列的方向为从上到下。</bullet_item><para/>
        ///     <bullet_item>水平 - 页面上带状地图系列的方向从左到右。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Page Orientation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _page_orientation_value _page_orientation { get; set; } = _page_orientation_value._HORIZONTAL;

        public enum _page_orientation_value
        {
            /// <summary>
            /// <para>Horizontal</para>
            /// <para>Horizontal—The direction of the strip map series on the page is left to right. This is the default.</para>
            /// <para>水平 - 页面上带状地图系列的方向从左到右。这是默认设置。</para>
            /// </summary>
            [Description("Horizontal")]
            [GPEnumValue("HORIZONTAL")]
            _HORIZONTAL,

            /// <summary>
            /// <para>Vertical</para>
            /// <para>Vertical—The direction of the strip map series on the page is top to bottom.</para>
            /// <para>垂直 - 页面上带状地图系列的方向为从上到下。</para>
            /// </summary>
            [Description("Vertical")]
            [GPEnumValue("VERTICAL")]
            _VERTICAL,

        }

        /// <summary>
        /// <para>Percentage of Overlap</para>
        /// <para>The approximate percentage of geographic overlap between an individual map page and its adjoining pages in the series. The default is 10.</para>
        /// <para>单个地图页面与其系列中相邻页面之间的地理重叠的近似百分比。默认值为 10。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Percentage of Overlap")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _overlap_percentage { get; set; } = 10;


        /// <summary>
        /// <para>Starting Page Number</para>
        /// <para>The page number of the starting page. Each grid index feature is assigned a sequential page number beginning with the specified starting page number. The default is 1.</para>
        /// <para>起始页的页码。为每个格网索引要素分配一个从指定的起始页码开始的连续页码。默认值为 1。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Starting Page Number")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _starting_page_number { get; set; } = 1;


        /// <summary>
        /// <para>Strip Map Direction</para>
        /// <para><xdoc>
        ///   <para>Specifies the initial direction of the strip maps.</para>
        ///   <bulletList>
        ///     <bullet_item>West to East and North to South—If the line's directional trend is West to East, the starting point will be at the westernmost end of the line, or if the line's direction trend is North to South, the starting point will be at the northernmost end of the line. This is the default.</bullet_item><para/>
        ///     <bullet_item>West to East and South to North—If the line's directional trend is West to East, the starting point will be at the westernmost end of the line, or if the line's direction trend is South to North, the starting point will be at the southernmost end of the line.</bullet_item><para/>
        ///     <bullet_item>East to West and North to South—If the line's directional trend is East to West, the starting point will be at the easternmost end of the line, or if the line's direction trend is North to South, the starting point will be at the northernmost end of the line.</bullet_item><para/>
        ///     <bullet_item>East to West and South to North—If the line's directional trend is East to West, the starting point will be at the easternmost end of the line, or if the line's direction trend is South to North, the starting point will be at the southernmost end of the line.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定带状贴图的初始方向。</para>
        ///   <bulletList>
        ///     <bullet_item>从西到东和从北到南 - 如果线的方向趋势为从西到东，则起点将位于线的最西端，或者如果线的方向趋势为从北到南，则起点将位于线的最北端。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>从西到东和从南到北 - 如果线的方向趋势为从西到东，则起点将位于线的最西端，或者如果线的方向趋势为南到北，则起点将位于线的最南端。</bullet_item><para/>
        ///     <bullet_item>从东到西和从北到南 - 如果线的方向趋势为从东到西，则起点将位于线的最东端，或者如果线的方向趋势为从北到南，则起点将位于线的最北端。</bullet_item><para/>
        ///     <bullet_item>从东到西和从南到北 - 如果线的方向趋势为从东到西，则起点将位于线的最东端，或者如果线的方向趋势为南到北，则起点将位于线的最南端。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Strip Map Direction")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _direction_type_value _direction_type { get; set; } = _direction_type_value._WE_NS;

        public enum _direction_type_value
        {
            /// <summary>
            /// <para>West to East and North to South</para>
            /// <para>West to East and North to South—If the line's directional trend is West to East, the starting point will be at the westernmost end of the line, or if the line's direction trend is North to South, the starting point will be at the northernmost end of the line. This is the default.</para>
            /// <para>从西到东和从北到南 - 如果线的方向趋势为从西到东，则起点将位于线的最西端，或者如果线的方向趋势为从北到南，则起点将位于线的最北端。这是默认设置。</para>
            /// </summary>
            [Description("West to East and North to South")]
            [GPEnumValue("WE_NS")]
            _WE_NS,

            /// <summary>
            /// <para>West to East and South to North</para>
            /// <para>West to East and South to North—If the line's directional trend is West to East, the starting point will be at the westernmost end of the line, or if the line's direction trend is South to North, the starting point will be at the southernmost end of the line.</para>
            /// <para>从西到东和从南到北 - 如果线的方向趋势为从西到东，则起点将位于线的最西端，或者如果线的方向趋势为南到北，则起点将位于线的最南端。</para>
            /// </summary>
            [Description("West to East and South to North")]
            [GPEnumValue("WE_SN")]
            _WE_SN,

            /// <summary>
            /// <para>East to West and North to South</para>
            /// <para>East to West and North to South—If the line's directional trend is East to West, the starting point will be at the easternmost end of the line, or if the line's direction trend is North to South, the starting point will be at the northernmost end of the line.</para>
            /// <para>从东到西和从北到南 - 如果线的方向趋势为从东到西，则起点将位于线的最东端，或者如果线的方向趋势为从北到南，则起点将位于线的最北端。</para>
            /// </summary>
            [Description("East to West and North to South")]
            [GPEnumValue("EW_NS")]
            _EW_NS,

            /// <summary>
            /// <para>East to West and South to North</para>
            /// <para>East to West and South to North—If the line's directional trend is East to West, the starting point will be at the easternmost end of the line, or if the line's direction trend is South to North, the starting point will be at the southernmost end of the line.</para>
            /// <para>从东到西和从南到北 - 如果线的方向趋势为从东到西，则起点将位于线的最东端，或者如果线的方向趋势为南到北，则起点将位于线的最南端。</para>
            /// </summary>
            [Description("East to West and South to North")]
            [GPEnumValue("EW_SN")]
            _EW_SN,

        }

        public StripMapIndexFeatures SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}